package com.jl.magic.montage;

import com.jl.magic.montage.compose.AbstractSynthesizer;
import com.jl.magic.montage.config.AbstractInlayConfig;
import com.jl.magic.montage.model.Inlay;
import com.jl.magic.montage.model.SubImage;
import com.jl.magic.montage.slicer.AbstractSlicer;
import com.jl.magic.montage.tessera.AbstractInlayHandler;

import java.awt.image.BufferedImage;
import java.io.File;
import java.util.List;

/**
 * @author jiangli
 * @create 2020/7/15 9:02 上午
 * 策略工厂
 */
public interface StrategyFactory {

    /**
     * 创建分割器
     *
     * @param source      源图
     * @param inlayConfig 镶元图片配置
     * @param sliceCount  分割子图数量
     * @return 抽象的分割器
     */
    AbstractSlicer createSlicer(BufferedImage source, AbstractInlayConfig inlayConfig, int sliceCount);

    /**
     * 创建镶元图片处理器
     *
     * @param images      镶嵌图片
     * @param inlayConfig 镶元图片配置
     * @param compressed  是否进行图片压缩
     * @return 抽象的镶嵌图片处理器
     */
    AbstractInlayHandler createInlayHandler(List<File> images, AbstractInlayConfig inlayConfig, boolean compressed);

    /**
     * 创建目标图片合成器
     *
     * @param subImageList 源图分割后的子图列表
     * @param inlayList    镶元图片列表
     * @param inlayConfig  镶元图片配置
     * @return 抽象的合成器
     */
    AbstractSynthesizer createSynthesizer(List<SubImage> subImageList, List<Inlay> inlayList, AbstractInlayConfig inlayConfig);

}
